#ifndef __SERVER_H__
#define __SERVER_H__

#include <iostream>
#include <string>
#include <cstring>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/socket.h>

#define LIN_MAX 1

// 判断文件描述符集合的最大值
// #define FDS_MAX(FD_1, FD_2) FD_1 > FD_2 ? FD_1 : FD_2
using namespace std;

class Server
{
private:
	// string server_ip;			  // 服务器的IP地址
	int port;	   // 服务器监听的端口号
	int client_fd; // 客户端套接字文件描述符
	// int sock_client_arr[LIN_MAX]; // 客户端套接字数组
	int server_fd; // 服务器套接字文件描述符
				   // int client_count;			  // 客户端个数

public:
	// 构造函数，初始化端口号和套接字描述符
	Server(int port);
	// 析构函数，关闭服务器以释放资源
	~Server();
	// 启动服务器，创建套接字并绑定和监听
	bool start();
	// 接收客户端连接
	bool acceptClient();
	// 接收客户端发送的数据
	string receiveData();
	// 向客户端发送数据
	void sendData(const string &data);
	//  // 处理多个客户端
	 void handleClients();

	// 重载 << 操作符，向客户端发送数据
	Server &operator<<(const std::string &data);

	// 重载 >> 操作符，从客户端接收数据
	Server &operator>>(std::string &data);

	// 关闭服务器和客户端连接
	void closeServer();
};

#endif
